package com.cy.ppj.service.message.impl;

import com.cy.ppj.comm.annotation.Message;
import com.cy.ppj.comm.constant.Constants;
import com.cy.ppj.comm.utils.CommonUtils;
import com.cy.ppj.model.dto.message.OrderStatusNotificationMessageDTO;
import com.cy.ppj.model.dto.wechat.WechatMessageTemplateDTO;
import com.cy.ppj.model.dto.wechat.WechatMessageTemplateDataDTO;
import com.cy.ppj.model.enums.MessageType;
import com.cy.ppj.model.enums.wechat.WechatTemplate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description 订单 在马先生后台审核通过 消息通知 service
 * @Author tanyilin
 * @Date 2019/4/2 19:10
 */
@Slf4j
@Message(type = MessageType.ORDER_BANKMA_AUDIT_PASS)
@Service
public class OrderBankmaAuditPassMessageImpl extends MessageServiceImpl {

    @Value("${mall.app.home.page}")
    private String mallAppHomePage;

    /**
     * 真正执行发送消息的方法
     *
     * @param message
     */
    @Override
    public void execute(String message) {
        //订单编号 orderId
        Long orderId = Long.valueOf(message);
        //查询发送微信消息的订单相关参数
        OrderStatusNotificationMessageDTO template = orderGoodsExtraInfoMapper.selectOrderStatusNotificationMessageDTO(orderId);
        if(template != null && !"dev".equals(Constants.PROFILES_ACTIVE)) {
            //发送微信消息
            sendWechatMessageTemplate(template);
        }
    }

    /**
     * 发送微信消息模板
     * @param template
     * @return void
     */
    private void sendWechatMessageTemplate(OrderStatusNotificationMessageDTO template) {

        if(template.getOpenId() == null) {
            log.info("订单[orderId={}，loanId={}]状态更新，由于客户没有绑定微信，无法发送微信消息。", template.getOrderId(), template.getThirdLoanId());
            return;
        }

        //封装参数map
        WechatMessageTemplateDataDTO first = new WechatMessageTemplateDataDTO();
        first.setValue("您好，您提交的家居分期订单已通过审核，请前往提现。");

        //订单号
        WechatMessageTemplateDataDTO keyword1 = new WechatMessageTemplateDataDTO();
        keyword1.setValue(String.valueOf(template.getOrderId()));

        //审核时间
        WechatMessageTemplateDataDTO keyword2 = new WechatMessageTemplateDataDTO();
        keyword2.setValue(CommonUtils.dateFormat2(new Date()));

        //审核结果
        WechatMessageTemplateDataDTO keyword3 = new WechatMessageTemplateDataDTO();
        keyword3.setValue("通过");

        WechatMessageTemplateDataDTO remark = new WechatMessageTemplateDataDTO();
        remark.setValue("请前往首页-家居分期点击立即提现进行分期签约及发起放款提现申请。");

        Map<String, WechatMessageTemplateDataDTO> data = new HashMap<>();
        data.put("first", first);
        data.put("keyword1", keyword1);
        data.put("keyword2", keyword2);
        data.put("keyword3", keyword3);
        data.put("remark", remark);

        WechatMessageTemplateDTO wechatMessageTemplateDTO = new WechatMessageTemplateDTO();
        wechatMessageTemplateDTO.setOpneId(template.getOpenId());
        wechatMessageTemplateDTO.setTemplateId(WechatTemplate.ORDER_BANKMA_AUDIT_PASS.getTemplateId());
        wechatMessageTemplateDTO.setUrl(mallAppHomePage);
        wechatMessageTemplateDTO.setData(data);

        //发送微信消息模板
        bankmaWechatService.sendTemplateMessage(wechatMessageTemplateDTO);

    }
}
